//package com.yunzhou.controller.user;
//
//import com.yunzhou.service.ChatHistoryService;
//import com.yunzhou.utils.ThreadLocalUtil;
//import com.yunzhou.vo.ChatMessageVO;
//import lombok.RequiredArgsConstructor;
//import org.springframework.ai.chat.client.ChatClient;
//import org.springframework.ai.chat.memory.ChatMemory;
//import org.springframework.ai.chat.messages.Message;
//import org.springframework.web.bind.annotation.*;
//import reactor.core.publisher.Flux;
//
//import java.util.List;
//
//import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;
//
//@RequiredArgsConstructor
//@RestController
//@RequestMapping("/user/ai")
//public class ChatController {
//    // 利用构造函数注入
//    private final ChatClient chatClient;
//    private final ChatHistoryService chatHistoryService;
//    private final ChatMemory chatMemory;
//
//    // 4、测试一下流式，并携带会话id，并且要把会话id保存到内存中的Map里
//    // 参数为提示词（默认返回event-stream，这里改为html，并设置字符集）
////    @RequestMapping(value = "/chat4Stream", produces = "text/html;charset=utf-8")
//    @PostMapping(value = "/chat4Stream", produces = "text/html;charset=utf-8")
//    public Flux<String> chat4(
//            @RequestParam("prompt") String prompt ) {
//        System.out.println("用户输入提示词为：" + prompt);
//        System.out.println("用户Token为：" + ThreadLocalUtil.getCurrentUserId());
//
//        // 1、先将会话id保存到内存的Map中，这里将Token作为会话id
//        // 从ThreadLocal中获取Token
//        String chatId = ThreadLocalUtil.getCurrentUserId().toString();
//        chatHistoryService.save("chat", chatId);
//
//        // 2、再与大模型交互
//        Flux<String> content = chatClient.prompt()
//                .user(prompt) // 用户输入的提示词
//                .advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)) // 静态导入，记录会话id
//                .stream() // 阻塞调用
//                .content();
//        return content;
//    }
//
//    @GetMapping("/getChatHistory")
//    public List<ChatMessageVO> getChatHistory() {
//        System.out.println("用户Token为：" + ThreadLocalUtil.getCurrentUserId());
//        // 从ThreadLocal中获取Token
//        String chatId = ThreadLocalUtil.getCurrentUserId().toString();
//
//        // 根据Token获取会话记录
//        List<Message> messages = chatMemory.get(chatId, Integer.MAX_VALUE);
//        if(messages == null) {
//            return List.of();
//        }
//        return messages.stream().map(ChatMessageVO::new).toList();
//    }
//
//}
